//: C10:Selfmem.cpp
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 1999
// Copyright notice in Copyright.txt
// Static member of same type
// ensures only one object of this type exists.
// Also referred to as a "singleton" pattern.
#include <iostream>
using namespace std;

class Egg
{
    static Egg e;
    int i;
    Egg(int ii) : i(ii) {}
public:
    static Egg* instance() {
        return &e;
    }
    int val() {
        return i;
    }
};

Egg Egg::e(47);

int main()
{
//!  Egg x(1); // Error -- can't create an Egg
    // You can access the single instance:
    cout << Egg::instance()->val() << endl;
} ///:~
